﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Anuntiomatic.Server
{
    public partial class SysRole : BaseClass
    {
        /// <summary>
        /// Kiểm tra quyền của link theo danh sách quyền được cung cấp
        /// </summary>
        /// <param name="userId">Id của User đang đăng nhập</param>
        /// <param name="link">Link page</param>
        /// <param name="roles">danh sách quyền</param>
        /// <returns></returns>
        public static bool CheckRole(int userId, string link, params string[] roles)
        {
            try
            {
                if (link.ToLower().Contains("default.aspx"))
                    return true;
                var menu = SysMenu.SingletonInstance
                            .Where(p => !string.IsNullOrWhiteSpace(p.Link))
                            .FirstOrDefault(p => link.Contains(System.Web.VirtualPathUtility.ToAbsolute(p.Link)));
                if (menu == null)
                    return false;
                DataTable dtRoleList = new DataTable();
                dtRoleList.Columns.Add("TypeName", typeof(string));
                foreach (string role in roles)
                    dtRoleList.Rows.Add(role);
                SqlParameter[] param = new SqlParameter[]{
                    new SqlParameter("@UserID", userId),
                    new SqlParameter("@MenuID", menu.MenuID),
                    new SqlParameter("@ListRole", dtRoleList)
                };
                param[2].SqlDbType = SqlDbType.Structured;
                param[2].TypeName = "dbo.Varchar50TableType";
                return (bool)ExecuteScalar("usp_SysRole_CheckRole", CommandType.StoredProcedure, param);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static List<SysRole> GetAll()
        {
            using (var context = new DBDataContext())
            {
                return context.SysRoles.OrderBy(p => p.Ord).ToList();
            }
        }
    }
}
